<?php


/**
 * 视图渲染器接口类.
 *
 * 视图渲染器接口,主要定义了两个接口方法<i>windAssign</i>和<i>windFetch</i><pre>
 * IWindViewerResolver接口是框架定义的基础的视图渲染器接口,通过实现该接口类来自定义视图渲染器
 * <i>WindViewerResolver</i>类是该接口的基本实现
 * </pre>
 *
 * @author Qiong Wu <papa0924@gmail.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: IWindViewerResolver.php 3904 2013-01-08 07:01:26Z yishuo $
 */
interface IWindViewerResolver
{
    /**
     * 设置视图变量设置进当前模板
     *
     * @param array|string|object $vars
     * @param string              $key  可选 默认值为空
     */
    public function windAssign($vars, $key = '');

    /**
     * 获取模板内容与变量信息.
     *
     * @param string $template 可选 默认值为空
     */
    public function windFetch($template = '');
}

/**
 * 辅助WindViewerResolver完成视图渲染工作.
 *
 * @author Qiong Wu <papa0924@gmail.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: IWindViewerResolver.php 3904 2013-01-08 07:01:26Z yishuo $
 */
class WindRender
{
    /**
     * 视图渲染.
     *
     * @param string             $__tpl
     * @param array              $__vars
     * @param WindViewerResolver $__viewer
     *
     * @throws WindViewException
     */
    public static function render($__tpl, $__vars, $__viewer)
    {
        @extract($__vars, EXTR_REFS);
        if (!include($__tpl)) {
            throw new WindViewException('[viewer.WindRender.render] template name '.$__tpl,
                WindViewException::VIEW_NOT_EXIST);
        }
    }
}
